package admincow.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import admincow.util.ConexionBD;
import admincow.vo.ProduccionVO;

public class ProduccionDAO {

	public ProduccionVO obtenerPorIdproduc(int idproduc) {
		ProduccionVO vo = new ProduccionVO();
		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt
					.executeQuery("select idproduc,RPvaca,primer_ord,segundo_ord,tercer_ord,total_ord,prec_litro,precio,fecha from produccion where idproduc='" 
							+idproduc+ "'");
			if (rs.next()) {
				vo.setIdproduc(rs.getInt("idproduc"));
				vo.setRPvaca(rs.getString("RPvaca"));
				vo.setPrimer_ord(rs.getFloat("primer_ord"));
				vo.setSegundo_ord(rs.getFloat("segundo_ord"));
				vo.setTercer_ord(rs.getFloat("tercer_ord"));
				vo.setTotal_ord(rs.getFloat("total_ord"));
				vo.setPrec_litro(rs.getFloat("prec_litro"));
				vo.setPrecio(rs.getFloat("precio"));
				vo.setFecha(rs.getString("fecha"));
				}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public Collection<ProduccionVO> buscarPorRPvaca( String rpvaca,String feca,String fecb) {
		String query = "select idproduc,RPvaca,primer_ord,segundo_ord,tercer_ord,total_ord,prec_litro,precio,fecha from produccion where RPvaca like '%"
			+ rpvaca + "%' and fecha between '"+feca+"' and '"+fecb+"'";
		Collection<ProduccionVO> c = new ArrayList<ProduccionVO>();

		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			while (rs.next()) {
				ProduccionVO vo = new ProduccionVO();
				vo.setIdproduc(rs.getInt("idproduc"));
				vo.setRPvaca(rs.getString("RPvaca"));
				vo.setPrimer_ord(rs.getFloat("primer_ord"));
				vo.setSegundo_ord(rs.getFloat("segundo_ord"));
				vo.setTercer_ord(rs.getFloat("tercer_ord"));
				vo.setTotal_ord(rs.getFloat("total_ord"));
				vo.setPrec_litro(rs.getFloat("prec_litro"));
				vo.setPrecio(rs.getFloat("precio"));
				vo.setFecha(rs.getString("fecha"));
				c.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return c;
	}

	public ProduccionVO insertar(ProduccionVO vo) {
		System.out.println("Ingresando al insetar Produccion nueva");
		String query = " insert into produccion (idproduc,RPvaca,primer_ord,segundo_ord,tercer_ord,total_ord,prec_litro,precio,fecha) values ( ?,?,?,?,?,?,?,?,?)";
		System.out.println(query);
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getIdproduc());
			stmt.setString(2, vo.getRPvaca());
			stmt.setFloat(3, vo.getPrimer_ord());
			stmt.setFloat(4, vo.getSegundo_ord());
			stmt.setFloat(5, vo.getTercer_ord());
			stmt.setFloat(6, vo.getTotal_ord());
			stmt.setFloat(7, vo.getPrec_litro());
			stmt.setFloat(8, vo.getPrecio());
			stmt.setString(9, vo.getFecha());
			
			

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public ProduccionVO actualizar(ProduccionVO vo) {
		System.out.println("Ingresando al actualizar usuario");
		String query = "UPDATE produccion SET RPvaca=?,primer_ord=?, segundo_ord=?, tercer_ord=?,total_ord=?,prec_litro=?,precio=?,fecha=? WHERE idproduc=?";
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query);
			stmt.setString(1,vo.getRPvaca());
			stmt.setFloat(2, vo.getPrimer_ord());
			stmt.setFloat(3, vo.getSegundo_ord());
			stmt.setFloat(4, vo.getTercer_ord());
			stmt.setFloat(5, vo.getTotal_ord());
			stmt.setFloat(6, vo.getPrec_litro());
			stmt.setFloat(7, vo.getPrecio());
			stmt.setString(8, vo.getFecha());
			stmt.setInt(9, vo.getIdproduc());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}

			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public void eliminar(int idproduc) {
		String query = "DELETE FROM produccion WHERE idproduc=?";
		// Table produccion
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query);
			stmt.setInt(1, idproduc);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar PRODUDCION");
			}
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	public Collection<ProduccionVO> listarTodos() {
		Collection<ProduccionVO> c = new ArrayList<ProduccionVO>();
		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt
					.executeQuery("SELECT a.idusuario,a.password,a.nombres,a.paterno,a.materno,a.correo,a.direccion,a.telefono,a.estado,b.idusuario,b.nom_fun FROM usuario a INNER JOIN usuario_funcion b ON a.idusuario = b.idusuario");
			while (rs.next()) {
				ProduccionVO vo = new ProduccionVO();
				vo.setIdproduc(rs.getInt("idproduc"));
				vo.setPrimer_ord(rs.getInt("primer_ord"));
				vo.setSegundo_ord(rs.getInt("segundo_ord"));
				vo.setFecha(rs.getString("fecha"));
				c.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return c;
	}

}
